
package br.ufscar.sor.ppgccs.educatransito.managedbean;

import br.ufscar.sor.ppgccs.educatransito.entidade.Usuario;
import br.ufscar.sor.ppgccs.educatransito.fachada.UsuarioFacade;
import br.ufscar.sor.ppgccs.educatransito.util.MensagemUtility;
import java.io.Serializable;
import java.text.Format;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.ejb.EJB;
import javax.enterprise.context.SessionScoped;
import javax.inject.Named;

/**
 *
 * @author Joaquim
 */
@Named(value = "loginManagedBean")
@SessionScoped
public class LoginManagedBean implements Serializable {

    /**
     * Creates a new instance of LoginManagedBean
     */
    
    @EJB
    private UsuarioFacade usuarioFacade;
    
    private boolean usuarioLogado = false;
    private Usuario usuario;
    private String login;
    private String senha;
    private String tipoUsuario;
    private Date data = new Date();

    public boolean isUsuarioLogado() {
        return usuarioLogado;
    }

    public void setUsuarioLogado(boolean usuarioLogado) {
        this.usuarioLogado = usuarioLogado;
    }

    public Usuario getUsuario() {
        return usuario;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    public String getLogin() {
        return login;
    }

    public void setLogin(String login) {
        this.login = login;
    }

    public String getSenha() {
        return senha;
    }

    public void setSenha(String senha) {
        this.senha = senha;
    }

    public String getTipoUsuario() {
        return tipoUsuario;
    }

    public void setTipoUsuario(String tipoUsuario) {
        this.tipoUsuario = tipoUsuario;
    }

    public String efetuarLogin() {
        try {
            
            usuario = usuarioFacade.efetuarLogin(login, this.md5(senha));
            if (usuario != null) {
                this.setUsuarioLogado(true);
                this.tipoUsuario = usuario.getIdTipoUsuario().getDescricao();
                MensagemUtility.adicionarMensagemDeSucesso("formIndex", "Olá " + usuario.getNome());
                return "/index.xhtml";
            } else {
                MensagemUtility.adicionarMensagemDeErro("formLogin", "Usuário ou Senha inválido!!!");
                this.setUsuarioLogado(false);
                return "/login.xhtml";
            }
        } catch (Exception e) {
            MensagemUtility.adicionarMensagemDeErro("formLogin", e.getMessage());
            this.setUsuarioLogado(false);
            return "/login.xhtml";
        }

    }

    public String getCabecalho() {
        Format f;
        String dia, mes, ano, cabecalho;

        f = new SimpleDateFormat("dd");
        dia = f.format(data);

        f = new SimpleDateFormat("MM");
        mes = f.format(data);

        switch (Integer.parseInt(mes)) {
            case 1:
                mes = "Janeiro";
                break;
            case 2:
                mes = "Fevereiro";
                break;
            case 3:
                mes = "Março";
                break;
            case 4:
                mes = "Abril";
                break;
            case 5:
                mes = "Maio";
                break;
            case 6:
                mes = "Junho";
                break;
            case 7:
                mes = "Julho";
                break;
            case 8:
                mes = "Agosto";
                break;
            case 9:
                mes = "Setembro";
                break;
            case 10:
                mes = "Outubro";
                break;
            case 11:
                mes = "Novembro";
                break;
            case 12:
                mes = "Dezembro";
        }

        f = new SimpleDateFormat("yyyy");
        ano = f.format(data);

        cabecalho = "Sorocaba, " + dia + " de " + mes + " de " + ano;

        if (this.usuario != null) {
            cabecalho = cabecalho + " -- Seja bem-vindo(a), " + this.usuario.getNome();
        }
        return cabecalho;

    }

    public String md5(String text) {
        String md5Text = "";
        try {
            java.security.MessageDigest md = java.security.MessageDigest.getInstance("MD5");
            md.update(text.getBytes());

            byte[] bytes = md.digest();

            for (int i = 0; i < bytes.length; i++) {
                md5Text += ((Integer.toHexString((bytes[i] & 0xFF) | 0x100)).substring(1, 3));
            }
        } finally {
            return md5Text;
        }
    }
    
    public String efetuarLogoutMobile() {

        try {
            this.login = null;
            this.senha = null;
            this.usuario = null;
            this.tipoUsuario = null;
            this.usuarioLogado = false;            
            this.setUsuarioLogado(false);
            return "#{facesContext.externalContext.requestContextPath}/index2.xhtml";
        } catch (Exception e) {
            return "#{facesContext.externalContext.requestContextPath}/index.xhtml";
        }
        
    }
        
    public String efetuarLogout() {

        try {
            this.login = null;
            this.senha = null;
            this.usuario = null;
            this.tipoUsuario = null;
            this.usuarioLogado = false;            
            this.setUsuarioLogado(false);
            return "/index2.xhtml";
        } catch (Exception e) {
            return "/index.xhtml";
        }

    

    }
}
